package cn.tedu.lucky.draw.server.job.scheduler;

import org.springframework.batch.core.*;
import org.springframework.batch.core.explore.JobExplorer;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@EnableScheduling //用于启动基于注解的定时任务，Spring的任务调度就会被激活
public class ActivityScheduler {

    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    private JobExplorer jobExplorer;

    @Autowired
    private Job activityExpirationJob;

    /**
     * 第一个字段 表示秒 ，取值返回时0-59，表示在每分钟的第几秒执行。
     * 第二个字段 表示分，取值范围0-59，这里设置0
     * 第三个字段 表示时，取值范围时0-23，这里设置3 三点
     * 第四个字段 表示日，取值范围是1-31，这里设置为*，表示任意
     * 第五个字段 表示月，取值范围是1-12，这里设置为*，表示任意
     * 第六个字段 表示周，取值范围是1-7，1表示星期日，7表示星期六，这里设置为*，表示任意,?表示不确定
     */
    @Scheduled(cron = "0 0/1 * * * ? ") //每分钟执行一次
    public void start() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException {
        JobParameters jobParameters = new JobParametersBuilder(new JobParameters(), jobExplorer).getNextJobParameters(activityExpirationJob).toJobParameters();
        jobLauncher.run(activityExpirationJob, jobParameters);
    }
}
